package cn.sccdlg.spring5.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;

/**
 * @author RaoShuang
 * @emil 991207823@qq.com
 * @date 2020/10/19 21:36
 * spring配置类，它的作用和bean.xml是一样的
 * 针对bena.xml配置复杂的问题，进行优化设置，spring提供了配置类进行代替方案。
 */
// 配置类注解
@Configuration
// 指定扫描包位置
@ComponentScan("cn.sccdlg.spring5.outxml")
// 导入加载配置类信息
@Import(JdbcConfig.class)
@PropertySource("classpath:jdbcConfig.properties")
public class SpringConfiguration {

    /**
     * spring中的新注解（主要是配置spring资源）
     * @Configuration：作用：指定当前类是一个配置类
     *       细节：当配置类作为AnnotationConfigApplicationContext对象创建的参数时，该注解可以不写。
     * @ComponentScan：作用：用于通过注解指定spring在创建容器时要扫描的包
     *      属性：value  --它和basePackages的作用是一样的，都是用于指定创建容器时要扫描的包。
     *            使用此注解就等同于在xml中配置开启包扫描:
     *                <context:component-scan base-package="cn.sccdlg.spring5.outxml"/>
     * @Bean：作用：用于把当前方法的返回值作为bean对象存入spring的ioc容器中
     *      属性：name  --用于指定bean的id。可不写，不写时默认值是当前方法的名称
     *      细节：当我们使用注解配置方法时，如果方法有参数，spring框架会去容器中查找有没有可用的bean对象。
     *          查找的方式和Autowired注解的作用是一样的
     * @Import：作用：用于导入其他的配置类
     *      属性：value  --用于指定其他配置类的字节码。
     *            当我们使用Import的注解之后，有Import注解的类就父配置类，而导入的都是子配置类
     * @PropertySource：作用：用于指定properties文件的位置
     *      属性：value  --指定文件的名称和路径。
     *            关键字：classpath  --表示类路径下
     */
}
